home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d20 / doorskl3.arc / DOORSKEL.H < prev    next >
C/C++ Source or Header  |  1992-01-15  |  38KB  |  979 lines

  1. /**********************************************/
  2. /*                                              */
  3. /* XBBS Door Skeleton -- TC 2.0/MSC 6.0a code */
  4. /* Copyright (c) 1990/91 by M. Kimes          */
  5. /* All Rights Reserved                        */
  6. /* May be freely used for >>>FREE<<< programs */
  7. /* as long as you don't try to save any souls */
  8. /* (nasty habit)                              */
  9. /*                                            */
  10. /**********************************************/
  11.  
  12. /* DOORSKEL.H, DOORSKEL's main include file */
  13.  
  14.  
  15. /********************************************************/
  16. /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
  17. /* !                                                  ! */
  18. /* !Change the defines in thisproj.h to suit your Door! */
  19. /* !                                                  ! */
  20. /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
  21. /********************************************************/
  22.  
  23. #include "thisproj.h"
  24.  
  25.  
  26.  
  27. /* portability junk */
  28.  
  29. #ifdef __TURBOC__
  30.  
  31.     #include <dir.h>
  32.     #define _fastcall pascal
  33.     #define _pascal   pascal
  34.     #define _cdecl    cdecl
  35.     #define FAR       far
  36.  
  37. #else
  38.                                     /* actually MSC */
  39.     #ifdef DEBUG
  40.         #define _fastcall _pascal
  41.     #endif
  42.  
  43.     #include <direct.h>
  44.  
  45.     #define MAXDIR        133
  46.     #define SH_DENYNONE   SH_DENYNO
  47.     #define FAR           _far
  48.  
  49.     struct time {
  50.         unsigned char ti_min;
  51.         unsigned char ti_hour;
  52.         unsigned char ti_hund;
  53.         unsigned char ti_sec;
  54.     };
  55.     struct date {
  56.         int  da_year;
  57.         char da_day;
  58.         char da_mon;
  59.     };
  60.  
  61.     #if !defined(MK_FP)
  62.         #define MK_FP(seg,off) ((void FAR *)(((long)(seg) << 16) | (unsigned)(off)))
  63.     #endif
  64.  
  65.     char *searchpath(char *filename);
  66.  
  67. #endif
  68.  
  69.  
  70. /* standard include files */
  71.  
  72. #include <signal.h>
  73. #include <sys/types.h>
  74. #include <sys/stat.h>
  75. #include <io.h>
  76. #include <fcntl.h>
  77. #include <dos.h>
  78. #include <stdio.h>
  79. #include <string.h>
  80. #include <stdlib.h>
  81. #include <ctype.h>
  82. #include <time.h>
  83. #include <process.h>
  84. #include <share.h>
  85. #include <stdarg.h>
  86. #include <stddef.h>
  87. #include <conio.h>
  88.  
  89.  
  90.  
  91.  
  92. /******************************************/
  93. /* some hopefully helpful shortcut macros */
  94. /******************************************/
  95.  
  96. #define BACKSPACE       "\b \b"
  97. #define CSendByte(x)    while(!fossil(TRANSMIT,(x)) carrchk()
  98. #define SendByte(x)     while(!fossil(TRANSMIT,(x)))
  99. #define MinsLeft        ((timelimit - getxbbstime()) / 60L)
  100. #define PurgeOut        fossil(PURGEOUT,0)
  101. #define PurgeIn         fossil(PURGEIN,0)
  102. #define FlushOut        fossil(FLUSHOUT,0)
  103. #define DTROn           fossil(DTR,UP)
  104. #define DTROff          fossil(DTR,DOWN)
  105. #define ASetPos(x,y)    printfm("\x1b[%d;%dH",(x),(y))
  106. #define ASavePos        printm("\x1b[s")
  107. #define ARstrPos        printm("\x1b[u")
  108. #define IfANSI          if(graphics)
  109. #define IfLocal         if(baud)
  110. #define printg(s)       if(graphics) printm(s)
  111. #define RemoteBell      if(baud) while(!fossil(TRANSMIT,('\07')) carrchk();else putchar('\07')
  112.  
  113.  
  114. /******************************/
  115. /* typedefs to save on typing */
  116. /******************************/
  117.  
  118. typedef unsigned int  word;
  119. typedef unsigned int  bit;
  120. typedef unsigned char byte;
  121. typedef unsigned long ulong;
  122.  
  123.  
  124.  
  125.  
  126. /*************************************************************************/
  127. /* There's a lot of stuff following specific to XBBS.  Don't worry about */
  128. /* taking it out...it might bite you if you do and won't hurt if you     */
  129. /* don't...                                                              */
  130. /*************************************************************************/
  131.  
  132. /*------------------------------------------------------*/
  133. /* FIDO Message attributes (attr)                       */
  134. /*------------------------------------------------------*/
  135. #define MSGPRIVATE 0x0001  /* private message,          */
  136. #define MSGCRASH   0x0002  /* accept for forwarding     */
  137. #define MSGREAD    0x0004  /* read by addressee         */
  138. #define MSGSENT    0x0008  /* sent OK (remote)          */
  139. #define MSGFILE    0x0010  /* file attached to msg      */
  140. #define MSGFWD     0x0020  /* being forwarded           */
  141. #define MSGORPHAN  0x0040  /* unknown dest node         */
  142. #define MSGKILL    0x0080  /* kill after mailing        */
  143. #define MSGLOCAL   0x0100  /* FidoNet vs. local         */
  144. #define MSGXX1     0x0200  /*                           */
  145. #define MSGXX2     0x0400  /* STRIPPED by FidoNet<tm>   */
  146. #define MSGFRQ     0x0800  /* file request              */
  147. #define MSGRRQ     0x1000  /* receipt requested         */
  148. #define MSGCPT     0x2000  /* is a return receipt       */
  149. #define MSGARQ     0x4000  /* audit trail requested     */
  150. #define MSGURQ     0x8000  /* update request            */
  151.  
  152. /*------------------------------------------------------*/
  153. /* XBBS Message header                                  */
  154. /*------------------------------------------------------*/
  155. struct _xmsg {
  156.       char from[36];
  157.       char to[36];
  158.       char subj[64];
  159.       word o_point;
  160.       word length;         /* Length of message */
  161.      ulong start;          /* Starting postition in text file              */
  162.       char date[20];
  163.       word times;          /* Number of times read                         */
  164.       word dest;           /* Destination node                             */
  165.       word orig;           /* Origination node number                      */
  166.       word cost;           /* Unit cost charged to send the message        */
  167.       word orig_net;       /* Origination network number                   */
  168.       word dest_net;       /* Destination network number                   */
  169.       char indate[4];      /* import date  (YMD(null))                     */
  170.       word m_attr;         /* Extra attributes                             */
  171.       word d_zone;         /* Destination zone                             */
  172.       word o_zone;         /* Origination zone                             */
  173.       word attr;           /* Attribute (behavior) of the message          */
  174.       word d_point;
  175. };
  176.  
  177.  
  178. /* These apply to m_attr */
  179.  
  180. #define MSGDELETED 0x0001  /* deleted message,          */
  181. #define MSGANON    0x0002  /* anonymous message         */
  182. #define MSGECHO    0x0004  /* unmoved echo message      */
  183. #define MSGNET     0x0008  /* unmoved net message       */
  184. #define MSGHOLD    0x0010  /* file attached to msg      */
  185. #define MSGHOST    0x0020  /* being forwarded           */
  186. #define MSGSCANNED 0x0040  /* already scanned           */
  187. #define MSGKEEP    0x0080  /* don't delete              */
  188. #define MSGTREATED 0x0100  /* soft cr's & lf's removed  */
  189. #define MSGPACKED  0x0200  /* message LZSS compressed   */
  190. /*
  191.    #define    0x0400
  192.    #define    0x0800
  193.    #define    0x1000        all reserved
  194.    #define    0x2000
  195.    #define    0x4000
  196. */
  197. #define MSGTAGGED  0x8000  /* used by offline readers   */
  198.  
  199.  
  200.  
  201. /*------------------------------------------------------*/
  202. /* User record structure                                */
  203. /*------------------------------------------------------*/
  204.  
  205.   struct _user {
  206.       char           name[36];
  207.       char           handle[36];
  208.       struct date    birthdate;
  209.       char           password[12];
  210.       char           city[24];
  211.       char           state[3];
  212.       char           zip[6];
  213.       char           phone1[11];
  214.       char           phone2[11];
  215.       bit length: 7;
  216.       bit cold: 1;
  217.       char           width;
  218.         bit graphics: 1;
  219.         bit fullscreen: 1;
  220.         bit scrnclr: 1;
  221.         bit commodore: 1;
  222.         bit expert: 1;
  223.         bit more: 1;
  224.         bit ignorehrs: 1;
  225.         bit ignorerat: 1;
  226.         bit nokill: 1;
  227.         bit deleted: 1;
  228.         bit arq: 1;
  229.         bit twit: 1;
  230.         bit ansimenus: 1;
  231.         bit gen1: 1;
  232.         bit gen2: 1;
  233.         bit gen3: 1;
  234.       word           attr2;
  235.       word           stat[10];
  236.       unsigned long  upk;
  237.       unsigned long  downk;
  238.       word           upno;
  239.       word           downno;
  240.       word           posts;
  241.       int            credit;
  242.       char           violations;
  243.       struct date    lastdate;
  244.       struct time    lasttime;
  245.       struct date    logondate;
  246.       struct time    logontime;
  247.       unsigned long  times;
  248.       word           callsperday;
  249.       word           timepercall;
  250.       word           totaltime;
  251.       word           callstoday;
  252.       word           timetoday;
  253.       char           variable[5][76]; /* Strings vars saved w/ user record */
  254.       word           numvars[10];     /* Numeric vars saved w/ user record */
  255.       char           comptype;        /* # designating user's computer type */
  256.       word           uktoday;
  257.       word           dktoday;
  258.        bit            hiok: 1;
  259.        bit            lastmsgarea: 10;
  260.        bit            reserved: 5;
  261.       word            pointid;        /* If he's a mailerless point */
  262.       unsigned long  id;
  263.       char           node;
  264.     };
  265.  
  266.  
  267. /*------------------------------------------------------*/
  268. /* User attributes                                      */
  269. /*------------------------------------------------------*/
  270. #define GRAPHICS   0x0001  /* ANSI                      */
  271. #define FULLSCREEN 0x0002  /* full screen editor        */
  272. #define SCRNCLR    0x0004  /* screen clearing?          */
  273. #define COMMODORE  0x0008  /* GP Special flag           */
  274. #define EXPERT     0x0010  /* help level                */
  275. #define MORE       0x0020  /* More? pause               */
  276. #define IGNOREHRS  0x0040  /* Ignore u/d hours          */
  277. #define IGNORERAT  0x0080  /* Ignore ratio enforcement  */
  278. #define NOKILL     0x0100  /* Don't kill user           */
  279. #define DELETED    0x0200  /* User is deleted           */
  280. #define ARQ        0x0400  /* Reliable connect          */
  281. #define TWIT       0x0800  /* Twit or whatever          */
  282. #define ANSIMENUS  0x1000  /* Use ANSI Menus?           */
  283. #define GEN1       0x2000  /* No use by system          */
  284. #define GEN2       0x4000  /* No use by system          */
  285. #define GEN3       0x8000  /* No use by system          */
  286.  
  287.  
  288. /*-----------------------------------*/
  289. /* Message area record                */
  290. /*-----------------------------------*/
  291.  
  292. struct _mboard {
  293.   char       name[48];
  294.   char       forceto[36];
  295.   word       attr;          /* will become long next release of XBBS */
  296.   word       max;
  297.   word       number;
  298.   word       substat1;
  299.   word       substat2;
  300.   signed char age;
  301.   word         flags;
  302.   word       minwrite;
  303. };
  304.  
  305. /*------------------------------------------------------*/
  306. /* MBoard attributes                                    */
  307. /*------------------------------------------------------*/
  308. #define NOORIG     0x00000001  /* No Origin or tear     */
  309. #define ANSI       0x00000002  /* ANSI                  */
  310. #define PRIVATE    0x00000004  /* Obvious               */
  311. #define PUBLIC     0x00000008  /*   "                   */
  312. #define ECHO       0x00000010  /*   "                   */
  313. #define NET        0x00000020  /*   "                   */
  314. #define MCI        0x00000040  /*   "                   */
  315. #define READONLY   0x00000080  /*   "                   */
  316. #define ALTERNATE  0x00000100  /*   "                   */
  317. #define ALTECHO    0x00000200  /*   "                   */
  318. #define ANON       0x00000400  /*   "                   */
  319. #define REAL       0x00000800  /*   "                   */
  320. #define ASSOC      0x00001000  /* Msg area allows assoc */
  321. #define EXTERN     0x00002000  /* Activates [E] prompt  */
  322. #define FORCE      0x00004000  /* Always force          */
  323. #define COMPRESS   0x00008000  /* Allow LZSS comp here  */
  324. #define GROUPMAIL  0x00010000  /* Group mail conference */
  325. #define USENET     0x00020000  /* usenet conference     */
  326.  
  327.  
  328. /*---------------------------------------------------*/
  329. /* FBoard flags                                      */
  330. /*---------------------------------------------------*/
  331. #define COUNTDLS   0x0001  /* Use timestamp as #dls  */
  332. #define FREEFILES  0x0002  /* Don't inc downloads    */
  333. #define FILEASSOC  0x0004  /* File area allows assoc */
  334. #define FREEUP     0x0008  /* Don't inc uploads      */
  335.  
  336. /*---------------------------------------------------*/
  337. /* File area record                                  */
  338. /*---------------------------------------------------*/
  339.  
  340. struct _fboard {
  341.   char       name[47];
  342.   char       flags;
  343.   char       dpath[79];
  344.   char       upath[79];
  345.   signed char age;
  346.   word         userflags;
  347.   char       leechpercent;
  348. };
  349.  
  350.  
  351. /* sending this string to the commport aborts most file transfer protocols */
  352.  
  353. #define STOPDL "\x0b\x03\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18"
  354.  
  355. /*------------------------------------*/
  356. /* Protocol record                    */
  357. /*------------------------------------*/
  358.  
  359.   struct   protocol {
  360.     char   name[25];
  361.     char   key;
  362.     int    adj;
  363.     char   spawndn[119];
  364.     char   spawnup[119];
  365.     char   abort[48];
  366.     unsigned wild:         1;
  367.     unsigned multi:        1;
  368.     unsigned simul:        1;
  369.     unsigned list:        1;
  370.     unsigned opus:        1;
  371.     unsigned noname:    1;
  372.     unsigned reserved:    2;
  373.     char   pad1;
  374.     char   pad2;
  375.   };
  376.  
  377.  
  378. /*----------------------------------------------------*/
  379. /*                                                    */
  380. /* CONFIGURATION.............                         */
  381. /*                                                    */
  382. /*----------------------------------------------------*/
  383.  
  384. struct _config {
  385.    char   commport;       /* Commport to use...0=COM1,1=COM2,etc.          */
  386.    word   node;           /* Our node number                               */
  387.    char   mailpath[79];   /* Path for incoming messages                    */
  388.    char   filepath[79];   /* Path for incoming files                       */
  389.    word   net;            /* Our network number                            */
  390.    word   alt_node;       /* Alternate node number (mainly for HOSTS)      */
  391.    word   alt_net;        /* Alternate net number (mainly for HOSTS)       */
  392.    /* Note:  these bytes for zones are mistakes; will be corrected next
  393.       release of XBBS... */
  394.    byte   zone;           /* Our zone number                               */
  395.    byte   alt_zone;       /* Alternate zone number                         */
  396.    char   homepath[79];   /* Path to BBS Files                             */
  397.    char   outpath[79];    /* Path for outbound messages                    */
  398.    char   menupath[79];   /* Path to system menu files                     */
  399.    char   messpath[79];   /* Path to system message files                  */
  400.    char   sysop[36];      /* SysOp's name                                  */
  401.    char   system[64];     /* BBS's name                                    */
  402.    char   logfile[79];    /* System logfile                                */
  403.    word   idleseconds;    /* Seconds user can be idle before disconnect    */
  404.    char   pages;          /* Number of times user can page sysop           */
  405.    bit    sysopin:    1;  /* Is he? 0 or 1                                 */
  406.    bit    touchup:    1;  /* Touchup uploaded file dates? 0 or 1           */
  407.    bit    uptime:     1;  /* 1=Return upload time                          */
  408.    bit    downtime:   1;  /* 1=Return download time                        */
  409.    bit    dvideo:     1;  /* Use direct video for some output?             */
  410.    bit    bvideo:     1;  /* If not, use BIOS?                               */
  411.    bit    bioswrites: 1;  /* Write through BIOS for ANSI?                  */
  412.    bit    debug:      1;  /* Debug on or off (0 or 1)                      */
  413.    bit    ansiavail:  1;  /* Is ANSI available? 0 or 1                       */
  414.    bit       whichstat:  2;  /* Default status line (0-2)                       */
  415.    bit    promptsay:  1;
  416.    char   edansi[79];     /* External ANSI editor DOS string               */
  417.    char   edline[79];     /* External line editor DOS string               */
  418.    char   edlocal[79];    /* Local message editor DOS string               */
  419.    word   ansibaud;       /* Minimum baud for ANSI                         */
  420.    char   quotestring[4]; /* String to put before quotes in reply          */
  421.    ulong  callcount;      /* Number of System calls                        */
  422.    char   lastcaller[36]; /* Last caller to system                         */
  423.    word   netmailboard;   /* Net Mail Board #                              */
  424.    word   altnetboard;    /* Net Mail Board # for alternate zone:net/node  */
  425.    struct _mboard mboard; /* Default message board setup                   */
  426.    struct _fboard fboard; /* Default file board setup                      */
  427.    char   origin[59];     /* Default origin line                           */
  428.    char      carbons;          /* Number of carbons allowed                       */
  429.    char      jumpfile[10][13];  /* Jump filenames                               */
  430.    char   jumpkey[10][2]; /*    Jump keys                                   */
  431.    char   subfile[10][13];/*    Sub filenames                               */
  432.    char   subkey[10][2];  /*    Sub keys                                   */
  433.    word   nolmrs;
  434.    long      quote_pos;      /* Start of next sequential quote in quotefile   */
  435.    char   quote_file[13]; /* Name of quotefile                               */
  436.    char   domain[37];
  437.    char   alt_domain[37];
  438.    bit    forcefilemsg: 1;
  439.    bit    trace: 1;
  440.    bit    RBBSorQBBS: 1;  /* Type of DORINFO?.DEF to make                  */
  441.    bit    reservedbits: 5;
  442.    ulong  nextid;
  443.    word   packsize;
  444.    char   helpkey;
  445.    int    version;
  446.    long   lastcall;
  447.    char   reserved1[94]; /*                                               */
  448.    char   startat;        /* Start u/d enforcement after # d/l's           */
  449.    char   numcomps;       /* How many computer types you are tracking      */
  450.    char   edgraph[79];    /* "Real" ANSI editor                            */
  451.    char   comments;       /* Number of comment lines for upload            */
  452.    word   purgebaud;      /* Maximum baud rate to purge outbound with      */
  453.    bit      genphone:       1; /* Use generic phone input?                      */
  454.    bit    genstatezip: 1; /* Use state & zip as generic field?               */
  455.    bit       share:       1; /* Using SHARE.EXE?                               */
  456.    bit    fastANSI:    1; /* Use INT 29h for ANSI output?                  */
  457.    bit    logmenu:     1;
  458.    bit       logfiles:       1;
  459.    bit    logmsg:       1;
  460.    bit      logtext:       1;
  461.    char      nodelist[79];   /* Path to nodelist files                           */
  462.    word   lastusernum;      /* Last user's record #                           */
  463.    char   useswapdisk;      /* Disk drive to use for swapping                   */
  464.    char   LIMEMS;          /* Use LIMEMS for swapping?                       */
  465.    char   swap;              /* Swap or not?                                   */
  466.    int    available[41];  /* For third party apps...see notes              */
  467.    char   reserved2;
  468. };
  469.  
  470. /*
  471.      Notes on available[] area in _config structure.   These ints may be
  472.      allocated by a third-party program so long as the app first makes
  473.      sure the int is not 0!  Apps should always use the highest
  474.      available slot.  Do not use a slot unless it (the two-byte int) is
  475.      0!  Even XBBS might use a slot someday following this convention,
  476.      so you'll avoid system crashes someday if you play by the rules
  477.      today.
  478. */
  479.  
  480. #ifdef NEXT_XVERSION
  481.  
  482.     /* the next version of XBBS (1.18) will have the following config format
  483.        to correct the long-standing oversight of zones being limited to
  484.        1-255 */
  485.  
  486. struct _config {
  487.    char   commport;       /* Commport to use...0=COM1,1=COM2,etc.          */
  488.    word   node;           /* Our node number                               */
  489.    char   mailpath[79];   /* Path for incoming messages                    */
  490.    char   filepath[79];   /* Path for incoming files                       */
  491.    word   net;            /* Our network number                            */
  492.    word   alt_node;       /* Alternate node number (mainly for HOSTS)      */
  493.    word   alt_net;        /* Alternate net number (mainly for HOSTS)       */
  494.    word   alt_zone;       /* Alternate zone number                         */
  495.    char   homepath[79];   /* Path to BBS Files                             */
  496.    char   outpath[79];    /* Path for outbound messages                    */
  497.    char   menupath[79];   /* Path to system menu files                     */
  498.    char   messpath[79];   /* Path to system message files                  */
  499.    char   sysop[36];      /* SysOp's name                                  */
  500.    char   system[64];     /* BBS's name                                    */
  501.    char   logfile[79];    /* System logfile                                */
  502.    word   idleseconds;    /* Seconds user can be idle before disconnect    */
  503.    char   pages;          /* Number of times user can page sysop           */
  504.    bit    sysopin:    1;  /* Is he? 0 or 1                                 */
  505.    bit    touchup:    1;  /* Touchup uploaded file dates? 0 or 1           */
  506.    bit    uptime:     1;  /* 1=Return upload time                          */
  507.    bit    downtime:   1;  /* 1=Return download time                        */
  508.    bit    dvideo:     1;  /* Use direct video for some output?             */
  509.    bit    bvideo:     1;  /* If not, use BIOS?                               */
  510.    bit    bioswrites: 1;  /* Write through BIOS for ANSI?                  */
  511.    bit    debug:      1;  /* Debug on or off (0 or 1)                      */
  512.    bit    ansiavail:  1;  /* Is ANSI available? 0 or 1                       */
  513.    bit       whichstat:  2;  /* Default status line (0-2)                       */
  514.    bit    promptsay:  1;
  515.    char   edansi[79];     /* External ANSI editor DOS string               */
  516.    char   edline[79];     /* External line editor DOS string               */
  517.    char   edlocal[79];    /* Local message editor DOS string               */
  518.    word   ansibaud;       /* Minimum baud for ANSI                         */
  519.    char   quotestring[4]; /* String to put before quotes in reply          */
  520.    ulong  callcount;      /* Number of System calls                        */
  521.    char   lastcaller[36]; /* Last caller to system                         */
  522.    word   netmailboard;   /* Net Mail Board #                              */
  523.    word   altnetboard;    /* Net Mail Board # for alternate zone:net/node  */
  524.    struct _mboard mboard; /* Default message board setup                   */
  525.    struct _fboard fboard; /* Default file board setup                      */
  526.    char   origin[59];     /* Default origin line                           */
  527.    char      carbons;          /* Number of carbons allowed                       */
  528.    char      jumpfile[10][13];  /* Jump filenames                               */
  529.    char   jumpkey[10][2]; /*    Jump keys                                   */
  530.    char   subfile[10][13];/*    Sub filenames                               */
  531.    char   subkey[10][2];  /*    Sub keys                                   */
  532.    word   nolmrs;
  533.    long      quote_pos;      /* Start of next sequential quote in quotefile   */
  534.    char   quote_file[13]; /* Name of quotefile                               */
  535.    char   domain[37];
  536.    char   alt_domain[37];
  537.    bit    forcefilemsg: 1;
  538.    bit    trace: 1;
  539.    bit    RBBSorQBBS: 1;  /* Type of DORINFO?.DEF to make                  */
  540.    bit    reservedbits: 5;
  541.    ulong  nextid;
  542.    word   packsize;
  543.    char   helpkey;
  544.    int    version;
  545.    long   lastcall;
  546.    word   zone;
  547.    char   reserved1[92]; /*                                               */
  548.    char   startat;        /* Start u/d enforcement after # d/l's           */
  549.    char   numcomps;       /* How many computer types you are tracking      */
  550.    char   edgraph[79];    /* "Real" ANSI editor                            */
  551.    char   comments;       /* Number of comment lines for upload            */
  552.    word   purgebaud;      /* Maximum baud rate to purge outbound with      */
  553.    bit      genphone:       1; /* Use generic phone input?                      */
  554.    bit    genstatezip: 1; /* Use state & zip as generic field?               */
  555.    bit       share:       1; /* Using SHARE.EXE?                               */
  556.    bit    fastANSI:    1; /* Use INT 29h for ANSI output?                  */
  557.    bit    logmenu:     1;
  558.    bit       logfiles:       1;
  559.    bit    logmsg:       1;
  560.    bit      logtext:       1;
  561.    char      nodelist[79];   /* Path to nodelist files                           */
  562.    word   lastusernum;      /* Last user's record #                           */
  563.    char   useswapdisk;      /* Disk drive to use for swapping                   */
  564.    char   LIMEMS;          /* Use LIMEMS for swapping?                       */
  565.    char   swap;              /* Swap or not?                                   */
  566.    int    available[41];  /* For third party apps...see notes              */
  567.    char   reserved2;
  568. };
  569.  
  570. #endif
  571.  
  572.  
  573. /*-------------------------------------------------------*/
  574. /* Logon Configuration                                   */
  575. /*-------------------------------------------------------*/
  576.  
  577. struct _logconfig {
  578.   bit name;
  579.   bit handle;
  580.   bit phone1;
  581.   bit phone2;
  582.   bit graphics;
  583.   bit ansiedit;
  584.   bit scrnclr;
  585.   bit pagepause;
  586.   bit commflag;
  587.   bit zipcode;
  588.   bit city;
  589.   bit state;
  590.   bit pass;
  591.   bit birth;
  592.   bit length;
  593.   bit width;
  594.   bit locallog;          /* Automatic logon in local mode? */
  595.  
  596.   char   loglimit;       /* How long to give user for login (mins)        */
  597.   char   nameattempts;   /* How many times user can try to enter name     */
  598.   char   passattempts;   /* How many times user can try to enter pword    */
  599.   word   minbaud;        /* Minimum baud rate                             */
  600.   char   reserved[24];
  601. };
  602.  
  603.  
  604. struct _events {      /* Structure for XBBS online events */
  605.     char filename[13];
  606.     ulong secsleft;
  607. };
  608.  
  609.  
  610. /************************ End of XBBS junk *****************************/
  611.  
  612.  
  613.  
  614.  
  615. /*================================================================*/
  616. /* FOSSIL definitions...just call int 14h (see function fossil()) */
  617. /*================================================================*/
  618.  
  619. #define SETBAUD    0
  620. #define TRANSWAIT  1
  621. #define RECVWAIT   2
  622. #define GETSTAT    3
  623. #define INIT       4
  624. #define DEINIT     5
  625. #define DTR        6
  626.   #define UP         1
  627.   #define DOWN       0
  628. #define FLUSHOUT   8
  629. #define PURGEOUT   9
  630. #define PURGEIN    10
  631. #define TRANSMIT   11
  632. #define PEEK       12
  633. #define KEYNOWAIT  13
  634. #define KEYWAIT    14
  635. #define FLOW       15
  636. #define ONOFF      16
  637.   #define ON         0
  638.   #define OFF        2
  639. #define SETCRSR    17
  640. #define READCRSR   18
  641. #define ONEANSI    19
  642.   #define CARRIER    128
  643.   #define INITOK     0x1954
  644. #define WATCHDOG   20
  645. #define REBOOT     23
  646.   #define COLD       0
  647.   #define WARM       1
  648. #define BLOCKREAD  24
  649. #define BLOCKWRITE 25
  650.  
  651.  
  652.  
  653. /***************************************************************************/
  654. /* Symbols for genin()...don't think all are valid in this implementation. */
  655. /* Check the code.                                                         */
  656. /***************************************************************************/
  657.  
  658. #define ALLL     1
  659. #define ALPHA    2
  660. #define NUM      3
  661. #define ALPHANUM 4
  662. #define YESNO    5
  663. #define FLE      6
  664. #define FLEP     7
  665. #define FLEW     8
  666. #define FLEPW    9
  667. #define NAME     10
  668. #define NEAT     11
  669. #define PHONE    12
  670. #define DATE     13
  671. #define SUBJECT  14
  672. #define YESNOM   15
  673. #define FLEX     16
  674. #define ARROWS   17
  675. #define ANSIIN   18
  676. #define ANSISET  19
  677. #define FBATCH   20
  678. #define FBATCHW  21
  679. #define FBATCHWP 22
  680. #define FBATCHP  23
  681. #define TRUEANSI 24
  682. #define WORD      25
  683. #define WORDNUM     26
  684. #define BITS     27
  685. #define ANY         28
  686. #define ANYNOECHO 29
  687. #define HYPER    30
  688. #define THRU     31
  689. #define FLENX    64
  690. #define YESNOQ   65
  691.  
  692.  
  693.  
  694. /**************************************************************************/
  695. /*  Macros for implementing simple timers.  All timers use 1000ths of     */
  696. /*  a second, but are only 'accurate' to one clock tick.  Typical example */
  697. /*  of use (a one second timer):                                          */
  698. /*                                                                        */
  699. /*   clock_t t1;                                                          */
  700. /*                                                                        */
  701. /*   t1 = timerset(1000L);                                                */
  702. /*   while(!timeup(t1)) {                                                 */
  703. /*      ...do something...                                                */
  704. /*      pause_mtask();      // give up time slice                         */
  705. /*   }                                                                    */
  706. /**************************************************************************/
  707.  
  708. #ifdef __TURBOC__
  709.     #define CLOCKS_PER_SEC    CLK_TCK
  710. #endif
  711.  
  712.  #define timerset(tmt) (((tmt / 1000L) * (clock_t)CLOCKS_PER_SEC) + clock())
  713.  #define timeup(tmt) (tmt < clock())
  714.  #define timeleft(tmt) (((tmt - clock()) / (clock_t)CLOCKS_PER_SEC) * 1000L)
  715.  
  716.  
  717.  
  718. /*******************************************************/
  719. /* multitasker-cooperation functions in mtask.c        */
  720. /* set_mtask() is called in DOORSKEL.C                 */
  721. /*******************************************************/
  722.  
  723. void _fastcall set_mtask (void);
  724. void _fastcall pause_mtask (void);  /* give up time slice */
  725. void _fastcall my_sleep (int secs);
  726. void _fastcall DosSleep (clock_t millisecs);
  727.  
  728.  
  729.  
  730. /**************************************************************************/
  731. /* The following functions are in jim nutt's pd screen writing library    */
  732. /* (called SCREEN2.ASM in the archive.  OBJ is provided for those of you  */
  733. /* who don't have assemblers).  I switched to this from cprintf() because */
  734. /* TC's cprintf() can't handle screen lines below 25.  Besides, this is   */
  735. /* more flexible.  To get dprintf() to work exactly like TC's cprintf(),  */
  736. /* get the current cursor position with curr_cursor() just before calling */
  737. /* it (curr_cursor(&x,&y);dprintf(x,y,"Blah & foo...");).  Set color of   */
  738. /* dprintf() by changing the value of current_color. You can use the      */
  739. /* mcolor and/or clr definitions to get a value for it. dcls() clears to  */
  740. /* color in cls_clr instead of current_color.                             */
  741. /*                                                                        */
  742. /* Note: to cut down some on unneeded overhead, I've hidden several of    */
  743. /* the SCREEN2.ASM functions behind #ifdef __SCREEN2ASM__ and included    */
  744. /* small C replacements for dputs, dprintf and dputc (all that Doorskel   */
  745. /* uses by default).  If you want the rest, just #define __SCREEN2ASM__   */
  746. /**************************************************************************/
  747.  
  748. int  _cdecl  dprintf(int x,int y,char *string,...);
  749. #ifdef __SCREEN2ASM__
  750.     int  _pascal FAR dputs(int x, int y, char FAR *s);
  751.     void _pascal FAR dcls(void);
  752.     void _pascal FAR dputc(int x, int y, int c);
  753.     void _pascal FAR dputcx(int x,int y,char attr,char c);
  754.     int  _pascal FAR dputsx(int x,int y,char attr,char FAR *s);
  755.     void _pascal FAR dclrwnd(int x1, int y1, int x2, int y2);
  756.     void _pascal FAR dscrollup(int x1, int y1, int x2, int y2);
  757.     void _pascal FAR dscrolldn(int x1, int y1, int x2, int y2);
  758. #else
  759.     #define dputc(x,y,c) *(vseg + ((((y) - 1) * maxx) + ((x) - 1))) = \
  760.                           ((c) | (current_color << 8));
  761.     int  _pascal dputs(int x, int y, char *s);
  762. #endif
  763.  
  764. extern char cls_clr;       /* color for clear screen operations like dcls() */
  765. extern char current_color; /* current color for pd screen writing funcs */
  766. extern word videomethod;   /* video method for pd screen writing funcs (0=direct) */
  767. extern word vbase;         /* video base RAM location set by vmode() */
  768.  
  769.  
  770. /* macros to make it easy to define colors for cls_clr and current_color */
  771.  
  772. #define mcolor(fg,bg) ((fg & 15) | ((bg & 7) << 4))
  773. #define clr(bg,fg,in) ((fg) | (bg << 4) | (in))
  774.  
  775.  
  776.  
  777.  
  778. /************************************/
  779. /* functions in doormisc.c          */
  780. /************************************/
  781.  
  782. unsigned char  *_fastcall addtolog(unsigned char  *text);
  783. void  _fastcall cursor(int  x,int  y);
  784. void  _fastcall curr_cursor(int  *x,int  *y);
  785. unsigned char  *_fastcall stristr(unsigned char  *t,unsigned char  *s);
  786. unsigned char  *_fastcall stripcr(unsigned char  *a);
  787. unsigned char  *_fastcall lstrip(unsigned char  *a);
  788. unsigned char  *_fastcall rstrip(unsigned char  *a);
  789. unsigned char  _fastcall spawnit(unsigned char  *strr);
  790. void  _fastcall set_screen_size(void);
  791. void  _fastcall set_cooked(void);
  792. void  _fastcall set_raw(void);
  793. int  _fastcall vmode(void);
  794.  
  795.  
  796.  
  797. /************************************/
  798. /* functions in doorskel.c          */
  799. /************************************/
  800.  
  801. void  _cdecl main(int argc,unsigned char **argv);
  802. void  _fastcall printhelp(void);
  803. void  _fastcall chat(void);
  804. unsigned char  _fastcall inkey(void);
  805. unsigned char  _fastcall specialmod(unsigned char  wuz);
  806. unsigned char  _fastcall specialkey(unsigned char  a);
  807. void  _fastcall cls(void);
  808. unsigned char  _fastcall fossil(unsigned char  function,unsigned char  arg);
  809. void  _cdecl deinitialize(void);
  810. unsigned char  *_fastcall genin(unsigned char  length,unsigned char  password,
  811.                                 unsigned char  caps,unsigned char  hot,
  812.                                 unsigned char  type);
  813. unsigned char  _fastcall carrchk(void);
  814. void  _fastcall hitreturn(void);
  815. long  _fastcall getxbbstime(void);
  816. void  _fastcall printinfo(void);
  817. unsigned char  *_fastcall fidodate(void);
  818. int  _cdecl printfm(unsigned char  *string,...);
  819. void _cdecl aprintf(unsigned char  *string,...);
  820. void _cdecl debug_print(unsigned char  *string,...);
  821. int  _fastcall printm(unsigned char  *text);
  822. void  _fastcall mprint(unsigned char  *text);
  823. void  _fastcall print_stat(void);
  824.  
  825.  
  826.  
  827. /************************************/
  828. /* functions in doorskl4.c          */
  829. /************************************/
  830.  
  831. void _fastcall mainloop (void); /* where your coding begins... */
  832.  
  833.  
  834.  
  835.  
  836. /************************************/
  837. /* functions in ansi.asm            */
  838. /************************************/
  839.  
  840. int  _pascal FAR ansi      (char FAR *str);
  841. void _pascal FAR setcoords (int topx,int topy,int botx,int boty);
  842. void _pascal FAR getcoords (int FAR *topx,int FAR *topy,
  843.                            int FAR *botx,int FAR *boty);
  844. void _pascal FAR setfastansi(int fast);
  845.  
  846.  
  847.  
  848. /************************************/
  849. /* functions in optional doorskl5.c */
  850. /************************************/
  851.  
  852.  int _pascal    calcrc (char *ptrr, int count, int likexmodem); /* 16 bit */
  853.  long _fastcall crc32blk (char *str,int blklen);                /* 32 bit */
  854.  long _fastcall crc32str(char *str);
  855.  
  856.  
  857.  
  858.  
  859. /************************************/
  860. /* functions in optional doorhelp.c */
  861. /************************************/
  862.  
  863. void _fastcall load_help (char *hn);
  864. void _fastcall set_help (char *topic);
  865. void _fastcall help (void);
  866.  
  867.  
  868.  
  869.  
  870. /************************************/
  871. /* functions in optional dooransi.c */
  872. /************************************/
  873.  
  874. char _fastcall ansimenu2 (char tcolor,char color,char *title,
  875.                           char *lineorig,char variable[10][133]);
  876. char _fastcall ansimenu (char color, char *lineorig);
  877.  
  878.  
  879.  
  880. /************************************/
  881. /* functions in optional select1.c  */
  882. /************************************/
  883.  
  884. int _fastcall select_one (char **selections,int numselecs,char *prompt,
  885.                           unsigned int flags);
  886. int _fastcall is_one (int key,char **selections,int numselecs);
  887. int _fastcall top_menu (char **selections,int numselects);
  888. void _fastcall backup (int num);
  889. #define backup_string(s) backup(strlen(s) + 1)
  890.  
  891.  
  892.  
  893. /************************************/
  894. /* conditionally compiled functions */
  895. /* (mostly in doorskl2 and doorskl3 */
  896. /************************************/
  897.  
  898. #ifdef XBBS
  899.     void _fastcall getonline(void);
  900.     void _fastcall readconfig(void);
  901.     void _fastcall prepare(void);
  902.     void _fastcall saveconfig(void);
  903. #endif
  904.  
  905. #ifndef NOREADFILE
  906.     char   _fastcall readtext(char *,char);
  907.     char * _fastcall write_line (char **text,word linelen);
  908.     void   _fastcall strip_blanklines (char *hold);
  909. #endif
  910.  
  911. #ifdef FINDUSER
  912.     word _fastcall finduser (char *users_name,struct _user *other);
  913. #endif
  914.  
  915. #ifdef DORINFO
  916.     void _fastcall readinfo(void);
  917. #endif
  918.  
  919. #ifdef DIALTRANS
  920.     int _fastcall dial_trans (char *str);  /* in doormisc */
  921.     int _fastcall recvbyte (void);
  922.     int _fastcall is_carrier (void);
  923.     char * _fastcall get_modemstring (clock_t timer);
  924. #endif
  925.  
  926. #ifdef DISABLEBREAK
  927.     void _cdecl break_handler (int sigl);  /* in doorskel */
  928. #endif
  929.  
  930.  
  931. /***************************************/
  932. /* global variable extern declarations */
  933. /***************************************/
  934.  
  935. /* conditional globals */
  936.  
  937. #ifdef XBBS
  938.     extern struct _config conf;
  939.     extern struct _user   user;
  940.     extern word           userno;
  941.     extern struct time    timeon;
  942.     extern char           timer_off;
  943.     extern word           hold_time;
  944.     extern char           age;
  945.     extern char           pages;
  946.     extern struct _mboard mboard;
  947.     extern struct _fboard fboard;
  948.     extern struct _events event[10];
  949.     extern char           variable[10][82];
  950.     extern ulong          starter;
  951. #endif
  952.  
  953. /* globals always used */
  954.  
  955. extern char   debug_mode;
  956. extern char   graphics;
  957. extern time_t timelimit;
  958. extern word   baud;
  959. extern char   numlines;
  960. extern word   seclvl;
  961. extern time_t startt;
  962. extern char   sysopin;
  963. extern char   fastANSI;
  964. extern char   commport;
  965. extern char   logfile[133];
  966. extern char   username[36];
  967. extern char   width;
  968. extern char   chatting;
  969. extern char   chatted;
  970. extern char   nodenumber;
  971. extern char   system_name[64];
  972. extern char   sysop[36];
  973. extern int    maxx,maxy;
  974. extern int FAR *vseg;
  975.  
  976.  
  977.  
  978. /* END OF FILE: doorskel.h */
  979.